package com.hzit.manager.client;

import com.hzit.common.util.R;
import com.hzit.manager.client.factory.UserFallbackFactory;
import com.hzit.manager.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

//value: 需要访问的哪个微服务
//@FeignClient(value = "hzit-user",fallback = UserClient.UserFallBack.class)  // 使用fallback进行熔断处理
@FeignClient(value = "hzit-user",fallbackFactory = UserFallbackFactory.class)  // 使用fallback进行熔断处理
public interface UserClient {

	//1. 根据用户id查询用户
	@GetMapping("/user/findById")
	R findById();

	@GetMapping("/user/findById2")
	R findById2(@RequestParam("id") Integer id);

	@GetMapping("/user/findById3/{id}")
	R findById3(@PathVariable("id")  Integer id);

	@Component
	class UserFallBack implements UserClient{
		@Override
		public R findById() {
			return R.fail("{方法名：findById}[ 使用fallback属性进行熔断处理 ]hzit-user服务己关闭！");
		}

		@Override
		public R findById2(Integer id) {
			return R.fail("{方法名：findById2}[ 使用fallback属性进行熔断处理 ]hzit-user服务己关闭！");
		}

		@Override
		public R findById3(Integer id) {
			return R.fail("{方法名：findById3}[ 使用fallback属性进行熔断处理 ]hzit-user服务己关闭！");
		}
	}
}
